﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Syntezator_mowy.Extras;
using System.Threading;
using Syntezator_mowy.SDDBD;
using Syntezator_mowy.Tts;
using Microsoft.Speech.Recognition;

namespace Syntezator_mowy 
{
    class Syntezator : ISyntezator
    {
        private SynchrBuffer<string> przetworzonePliki;
        private SynchrBuffer<string> outBuffer;

        public Syntezator(ref SynchrBuffer<string> outBuffer, ref SynchrBuffer<string> przetworzonePliki)
        {
            this.przetworzonePliki = przetworzonePliki;
            this.outBuffer = outBuffer;
        }

        public void przeksztalcNaGlos(string sciezkaWejsciowa, string sciezkaWyjsciowa, Jezyk jezykPrzetwarzania)
        {
            SynchrBuffer<string> fileBuffer = new SynchrBuffer<string>();

            ParametrySyntezy parametrySyntezy = new ParametrySyntezy(sciezkaWejsciowa, sciezkaWyjsciowa, jezykPrzetwarzania, ref fileBuffer);

            Syntezator_mowy.Tts.Tts tts = new Tts.Tts(parametrySyntezy);
            Thread ttsThread = new Thread(new ThreadStart(tts.run));

            ParametryLaczenia paramertyLaczenia = new ParametryLaczenia(ref fileBuffer, sciezkaWyjsciowa);

            Joiner.Joiner joiner = new Joiner.WavJoiner(paramertyLaczenia);
            Thread joinerThread = new Thread(new ThreadStart(joiner.run));

            ttsThread.Start();
            joinerThread.Start();

            ttsThread.Join();
            joiner.EndAdding = true;
            joinerThread.Join();

            this.outBuffer.dodaj(sciezkaWyjsciowa);
            this.przetworzonePliki.dodaj(sciezkaWyjsciowa);
        }

        public void przeksztalcNaTekst(string sciezkaWejsciowa, string sciezkaWyjsciowa, Jezyk jezykPrzetwarzania, SpeechRecognitionEngine silnik)
        {
            ParametryRozpoznawania parametry = new ParametryRozpoznawania(sciezkaWejsciowa, sciezkaWyjsciowa, jezykPrzetwarzania);

            Syntezator_mowy.Sr.Sr sr = new Sr.Sr(parametry, silnik);
            Thread srThread = new Thread(new ThreadStart(sr.run));

            srThread.Start();
            srThread.Join();

            this.przetworzonePliki.dodaj(sciezkaWyjsciowa);

        }
    }
}
